iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
0

接下來幾個章節,會介紹Q-learning的進階方法,筆者可親自針對原本專案的Q-learning修改試試,但因為電腦都在跑別的東西了,所以實際效果如何或怎樣就讓讀者親自實驗囉XD 先說下每個方法對於每個環境並非都適用,各種better method可參考Rainway(先爆雷XD),裡面有各種方法的比較使用,很詳盡,對於想更認識Q-learning進階方法的讀者來說,非常推薦!
好哩之前講過DQN會有收斂不穩定的問題,這章將分享個有效的解決方案-Double DQN。

收斂不穩定

我們之前介紹到DQN會把target-net做Q現實的部分,到一定次數才會用evaluate-net參數copy給target-net更新,原本是要減緩更新幅度以此增加穩定性,但因為target-net的參數一段時間才會更新,Q現實值對學習不一定那麼有效果。有可能當下state採取action1是對的,但因為target-net的舊參數關係,可能輸出成action2的值。

解決方法

記得在程式碼Q-target跟Q-evaluate兩個網路是獨立開來的嗎?其實可讓Q-target的action由Q-evaluate來決定就可以囉!
https://ithelp.ithome.com.tw/upload/images/20191006/20121110N6M9lWg7fO.png

DQN

先來補充之前沒提到的target-net,這先複習上章節的Q更新程式碼

targets[i] = model.predict(state_t)
Q_sa = model.predict(state_t1)
targets[i, action_t] = reward_t + GAMMA * np.max(Q_sa)

Natual DQN

補上之前沒提到的target-net

targets[i] = model.predict(state_t)
Q_sa = model_target.predict(state_t1)
targets[i, action_t] = reward_t + GAMMA * np.max(Q_sa)

Double DQN

換成Double DQN,我們會對target-net的值不直接取最大,而是取evaluate最大值的index,然後才對target-net取值。

Q_index = model_evaluate.predict(state_t1)
Q_index = np.argmax(Q_index)
Q_sa = model_target.predict(state_t1)
targets[i, action_t] = reward_t + GAMMA * Q_sa[0][Q_index]

結語

Q-learning的貪婪算法目標是取最大值,這讓我們在很多場景能成功跑Q-learning,但這個特性也帶來了些問題,未來會在做補充,順便提解決方案。這幾個章講解的Q-learning優化其實內容稍嫌不充分,建議還是可以去翻翻論文了解更多細節,好哩今天這我們明天見拉!

補充參考

1.Natual DQN →https://web.stanford.edu/class/psych209/Readings/MnihEtAlHassibis15NatureControlDeepRL.pdf
2.Double DQN → https://arxiv.org/pdf/1509.06461.pdf


上一篇
Day20 Dino train(下)
下一篇
Day22 Dueling DQN
系列文
人工智慧(RL系列) 完爆遊戲30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言